home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # lessfile/lesspipe
- # $Id: lessopen,v 1.4 1998/05/12 09:37:46 torin Exp $
- # Plus POSIX sh changes by Y.Dirson
- #
- # Less filter for viewing non text files.
- #
- # Written by: Behan Webster <behanw@pobox.com>
- # Many Modifications by Darren Stalder
- # Further Modifications by Thomas Schoepf <schoepf@debian.org>
- #
- # combined lessfile and lesspipe to avoid duplication of decode stage
- # shell is sure icky. I'm real tempted to rewrite the whole thing in Perl
- #
- # Unfortunately, this means that I have filename dependencies sprinkled
- # throughout the code. If you don't want lessfile to be called that,
- # you'll need to change the LESSFILE envar below.
- #
- # Usage: eval `lessfile` or eval `lesspipe`
- #
- # less passes in:
- # $1 filename to be viewed with less (used by LESSOPEN)
- # and possibly (if used by lessfile)
- # $2 filename that was created during LESSOPEN
-
- TMPDIR=${TMPDIR:-/tmp}
- BASENAME=`basename $0`
- LESSFILE=lessfile
-
- # Helper function to list contents of ISO files (CD images)
- iso_list() {
- isoinfo -d -i "$1"
- isoinfo -d -i "$1" | grep -q ^Rock\.Ridge && iiopts="$iiopts -R"
- isoinfo -d -i "$1" | grep -q ^Joliet && iiopts="$iiopts -J"
- echo
- isoinfo -f $iiopts -i "$1"
- }
-
- if [ $# -eq 1 ] ; then
- # we were called as LESSOPEN
-
- # if the file doesn't exist, we don't do anything
- if [ ! -r "$1" ]; then
- exit 0
- fi
-
- # generate filename for possible use by lesspipe
- umask 077
- if [ $BASENAME = $LESSFILE ]; then
- TMPFILE=`tempfile -d $TMPDIR -p lessf`
- if [ -z "$TMPFILE" ]; then
- echo >&2 "Could not find essential program 'tempfile'. Exiting"
- exit 1
- fi
- fi
-
- (
- # possibly redirect stdout to a file for lessfile
- if [ $BASENAME = $LESSFILE ]; then exec > $TMPFILE; fi
-
- # Allow for user defined filters
- #if [ -x ~/.lessfilter -a -O ~/.lessfilter ]; then
- if [ -x ~/.lessfilter ]; then
- ~/.lessfilter "$1"
- if [ $? -eq 0 ]; then
- if [ $BASENAME = $LESSFILE ]; then
- if [ -s $TMPFILE ]; then
- echo $TMPFILE
- else
- rm -f $TMPFILE
- fi
- fi
- exit 0
- fi
- fi
-
- # Decode file for less
- case `echo "$1" | tr '[:upper:]' '[:lower:]'` in
- *.arj)
- if [ -x "`which unarj`" ]; then unarj l "$1"
- else echo "No unarj available"; fi ;;
-
- *.tar.bz2)
- if [ -x "`which bunzip2`" ]; then
- bunzip2 -dc "$1" | tar tvvf -
- else echo "No bunzip2 available"; fi ;;
-
- *.bz)
- if [ -x "`which bunzip`" ]; then bunzip -c "$1"
- else echo "No bunzip available"; fi ;;
-
- *.bz2)
- if [ -x "`which bunzip2`" ]; then bunzip2 -dc "$1"
- else echo "No bunzip2 available"; fi ;;
-
- *.deb|*.udeb)
- echo "$1:"; dpkg --info "$1"
- echo
- echo '*** Contents:'; dpkg-deb --contents "$1"
- ;;
-
- *.doc)
- if [ -x "`which catdoc`" ]; then
- catdoc "$1"
- else
- # no catdoc, read normally if file is text.
- if ( file "$1" | grep ASCII 2>/dev/null >/dev/null); then
- cat "$1"
- else
- echo "No catdoc available";
- fi
- fi
- ;;
-
- *.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif)
- if [ -x "`which identify`" ]; then
- identify "$1"
- else
- echo "No identify available"
- echo "Install ImageMagick to browse images"
- fi
- ;;
-
- *.iso)
- if [ -x "`which isoinfo`" ]; then iso_list "$1"
- else
- echo "No isoinfo available"
- echo "Install mkisofs to view ISO images"
- fi
- ;;
-
- *.bin|*.raw)
- if [ -x "`which isoinfo`" ]; then
- file "$1" | grep -q ISO\.9660 && iso_list "$1"
- else
- echo "No isoinfo available"
- echo "Install mkisofs to view ISO images"
- fi
- ;;
-
- *.lha|*.lzh)
- if [ -x "`which lha`" ]; then lha v "$1"
- else echo "No lha available"; fi ;;
-
- *.tar.lzma)
- if [ -x "`which lzma`" ]; then
- lzma -dc "$1" | tar tfvv -
- else
- echo "No lzma available"
- fi
- ;;
-
- *.lzma)
- if [ -x "`which lzma`" ]; then
- lzma -dc "$1"
- else
- echo "No lzma available"
- fi
- ;;
-
- *.pdf)
- if [ -x "`which pdftotext`" ]; then pdftotext "$1" -
- else echo "No pdftotext available"; fi ;;
-
- *.rar|*.r[0-9][0-9])
- if [ -x "`which rar`" ]; then rar v "$1"
- elif [ -x "`which unrar`" ]; then unrar v "$1"
- else echo "No rar or unrar available"; fi ;;
-
- *.rpm)
- if [ -x "`which rpm`" ]; then
- echo "$1:"; rpm -q -i -p "$1"
- echo
- echo '*** Contents:'
- rpm -q -l -p "$1"
- else echo "rpm isn't available, no query on rpm package possible"; fi ;;
-
- *.tar.gz|*.tgz|*.tar.z|*.tar.dz)
- tar tzvf "$1" --force-local
- ;;
-
- # Note that this is out of alpha order so that we don't catch
- # the gzipped tar files.
- *.gz|*.z|*.dz)
- gzip -dc "$1" ;;
-
- *.tar)
- tar tvf "$1" --force-local
- ;;
-
- *.jar|*.war|*.ear|*.xpi|*.zip)
- if [ -x "`which unzip`" ]; then unzip -v "$1";
- elif [ -x "`which miniunzip`" ]; then miniunzip -l "$1";
- elif [ -x "`which miniunz`" ]; then miniunz -l "$1";
- else echo "No unzip, miniunzip or miniunz available"; fi ;;
-
- *.7z)
- if [ -x "`which 7za`" ]; then 7za l "$1";
- else echo "No 7za available"; fi ;;
-
- *.zoo)
- if [ -x "`which zoo`" ]; then zoo v "$1";
- elif [ -x "`which unzoo`" ]; then unzoo -l "$1";
- else echo "No unzoo or zoo available"; fi ;;
-
- esac
- ) 2>/dev/null
-
- if [ $BASENAME = $LESSFILE ]; then
- if [ -s $TMPFILE ]; then
- echo $TMPFILE
- else
- rm -f $TMPFILE
- fi
- fi
-
- elif [ $# -eq 2 ] ; then
- #
- # we were called as LESSCLOSE
- # delete the file created if we were lessfile
- #
- if [ $BASENAME = $LESSFILE ]; then
- if [ -n "$BASH" ]; then
- if [ ! -O "$2" ]; then
- echo "Error in deleting $2" > /dev/tty
- fi
- fi
-
- if [ -f "$2" ]; then
- rm -f "$2"
- else
- echo "Error in deleting $2" > /dev/tty
- fi
- fi
-
- elif [ $# -eq 0 ] ; then
- #
- # must setup shell to use LESSOPEN/LESSCLOSE
- #
- # I have no idea how some of the more esoteric shells (es, rc) do
- # things. If they don't do things in a Bourne manner, send me a patch
- # and I'll incorporate it.
- #
-
- # first determine the full path of lessfile/lesspipe
- # if you can determine a better way to do this, send me a patch, I've
- # not shell-scripted for many a year.
- FULLPATH=`cd \`dirname $0\`;pwd`/$BASENAME
-
- case "$SHELL" in
- *csh)
- if [ $BASENAME = $LESSFILE ]; then
- echo "setenv LESSOPEN \"$FULLPATH %s\";"
- echo "setenv LESSCLOSE \"$FULLPATH %s %s\";"
- else
- echo "setenv LESSOPEN \"| $FULLPATH %s\";"
- echo "setenv LESSCLOSE \"$FULLPATH %s %s\";"
- fi
- ;;
- *)
- if [ $BASENAME = $LESSFILE ]; then
- echo "export LESSOPEN=\"$FULLPATH %s\";"
- echo "export LESSCLOSE=\"$FULLPATH %s %s\";"
- else
- echo "export LESSOPEN=\"| $FULLPATH %s\";"
- echo "export LESSCLOSE=\"$FULLPATH %s %s\";"
- fi
- ;;
- esac
-
- #echo "# If you tried to view a file with a name that starts with '#', you"
- #echo "# might see this message instead of the file's contents."
- #echo "# To view the contents, try to put './' ahead of the filename when"
- #echo "# calling less."
-
- else
- echo "Usage: eval \`$BASENAME\`"
- exit
- fi
-